package org.ch03.job.test08;

import javax.persistence.Column;
import javax.persistence.Table;
import java.lang.reflect.Field;

/**
 * @author XCH
 * @date 2025 - 03 - 30
 */
public class SqlGenerate {
    // 生成select语句没有注释
    public static String generateSelect(Class<?> clz) {
        // 获取表名
        String tableName = getTableName(clz);
        // 获取字段
        Field[] fields = clz.getDeclaredFields();

        // 拼接sql
        StringBuilder sql = new StringBuilder("select ");

        // 添加所有字段
        for (Field field : fields) {
            sql.append(getColumnName(field)).append(", ");
        }

        // 删除最后一个逗号和空格
        if (fields.length > 0) {
            sql.delete(sql.length() - 2, sql.length());
        }

        // 添加from部分
        sql.append(" from ").append(tableName);

        return sql.toString();
    }
    // 获取表名如果有表名注解，则返回表名注解的值，否则返回类名
    public static String getTableName(Class<?> clz) {
        Table tableAnnotation = clz.getAnnotation(Table.class);
        if (tableAnnotation != null && !tableAnnotation.schema().isEmpty()) {
            return tableAnnotation.schema();
        }
        return clz.getSimpleName();
    }
    // 获取字段名如果有字段名注解，则返回字段名注解的值，否则返回字段名
    public static String getColumnName(Field field) {
        Column columnAnnotation = field.getAnnotation(Column.class);
        if (columnAnnotation != null && !columnAnnotation.name().isEmpty()) {
            return columnAnnotation.name();
        }
        return field.getName();
    }
}